package com.liner.collections;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class SortString {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("李书福");
        list.add("柴犬");
        list.add("1大大");
        System.out.println("list原始数据: " + list);
        Collections.sort(list);

        System.out.println("list排序后的数据:" + list);

        //自定义排序规则
        /*
        compare()方法用于定义o1和o2比较大小的规则，它的返回值表达大小关系结论:
        1)前面的-后面的------------升序
        2)后面的-前面的------------降序
         */



        Collections.sort(list, new Comparator<String>() {
            /*
            compare()方法用于定义o1和o2比较大小的规则，它的返回值表达大小关系结论:
            1)前面的-后面的------------升序
            2)后面的-前面的------------降序
             */
            @Override
            public int compare(String a, String b) {
                return a.length() - b.length();
            }
        });

        //以上方法可简写为 Lambda表达式
        Collections.sort(list, (a, b) -> a.length() - b.length());

        //也可替换成 方法引用
        Collections.sort(list, Comparator.comparingInt(String::length));

        System.out.println("list自定义排序根据长度从小到大后的数据:" + list);

        System.out.println("李:" + (int)'李');
        System.out.println("柴:" +(int)'柴');
        System.out.println("1:" +(int)'1');

        list.add("jack");
        list.add("rose");
        list.add("tom");
        list.add("jerry");
        list.add("rick");
        list.add("morty");

        System.out.println("list原始数据: " + list);

        //ASCII 65 A 97 a  48 0
        // 对英文字符串排序时，会按首字母的ASCII码来排
        // 若首字母相同，则比较第2个字母的ASCII码，以此类推
        Collections.sort(list);
        System.out.println("list排序后的数据:" + list);

    }
}
